﻿//////////////////////
// Интерфейс среды моделирования
// Василий Кудрявцев
// 10 января 2009 г.

#light

namespace SilverLightFSharp

open System
open System.Windows
open System.Windows.Controls
open System.Windows.Data

open Fp
open FpCore
open InterpreterControlWithPanels
open System.Linq
open System.IO.IsolatedStorage
open SilverLightFSharp.SilverlightIO


//Класс приложения
type MyApp = class
    inherit Application
    new () as this = {} then
       
       SilverLightFSharp.SilverlightIO.LoadDefinitions();
        
       let editors = new InterpreterControlWithPanels.Page();
       editors.Output.Items.Clear();
        //Обработчик ввода
       let keyPressHandler  = fun (args : Input.KeyEventArgs)-> 
                              try  
                                    if args.Key = Input.Key.Enter then 
                                                  editors.Output.Items.Add editors.InputBox.Text
                                                  //Определям, означивать по шагам или сразу
                                                  let func = if editors.chbStep.IsChecked.Value then Fp.FpInterperter.exe_step else Fp.FpInterperter.exe
                                                  let text = func (editors.InputBox.Text.Replace("#", String.Empty)  + "\n");
                                                  //Означиваем выражения и получаем вывод в виде массива строк
                                                  let lines = (text.Split([|"##"|], StringSplitOptions.RemoveEmptyEntries))
                                                  Array.iter (fun s ->   editors.Output.Items.Add s) lines
                                                  //Сохраняем определения
                                                  SilverLightFSharp.SilverlightIO.SaveDefinitions();
                                                  //Очищаем поле ввода
                                                  editors.InputBox.Text <- String.Empty;
                                                  
                               with 
                                    | e  -> editors.Output.Items.Add  "Синтаксическая ошибка"
       
        

       let onStartup = fun (args : StartupEventArgs)  ->  this.RootVisual <- editors
                                                          if args.InitParams.ContainsKey("initialCode") then
                                                               editors.InputBox.Text <- args.InitParams.["initialCode"].Replace("##zap##", ",");
         
       editors.KeyUp.Add(keyPressHandler);  
        
       //Назначаем приложению корневой контрол
       this.Startup.Add(onStartup);
  
        
     
       
end

      
      
